/**
* @addtogroup bts_common
* bts_common
* @{
*/
/**
* @file         bts_common.h
* @brief        
* @note
* @author       Akee(shengkun.you@hopechart.com,尤胜坤)
*
* @par          修改日志
* <table>
* <tr><th>Date        <th>Version               <th>Author                                    <th>Description
* <tr><td>2023-11-09  <td>1.0                   <td>Akee(ysk@hopechart.com,尤胜坤)            <td>创建初始版本
* @copyright    杭州鸿泉物联网技术股份有限公司
*/
#ifndef _BTS_COMMON_H_
#define _BTS_COMMON_H_
#include "ofc/ofc_types.h"
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 请求动作枚举
 */
enum TBtsRequestActionTag 
{
    kBtsRequestActionNone       = 0,
    kBtsRequestActionRollback   = 1,                  ///< 回滚
    kBtsRequestActionRecovery   = 2,                  ///< 恢复出厂
    kBtsRequestActionOtx        = 3,                  ///< OTX模式更新
    kBtsRequestActionXcu        = 4                   ///< XCU服务模式
};
typedef enum TBtsRequestActionTag TBtsRequestAction;

/**
 * @brief 请求状态枚举
 */
enum TBtsRequestStatusTag
{
    kBtsRequestStatusNone           = 0,                 ///< 无请求
    kBtsRequestStatusInited         = 1,                 ///< 请求已经初始化 app->boot
    kBtsRequestStatusOpenned        = 2,                 ///< 请求已经接受(尚未执行实际操作) boot->app
    kBtsRequestStatusRejected       = 3,                 ///< 请求已经拒绝 boot->app
    kBtsRequestStatusPending        = 4,                 ///< 正在执行 boot->boot
    kBtsRequestStatusCompleted      = 5,                 ///< 请求完成 boot->app
    kBtsRequestStatusClosed         = 6,                 ///< 请求已经关闭 app->boot,boot->boot
    kBtsRequestStatusAutoRollback   = 7                  ///< 回滚 boot->boot
};
typedef enum TBtsRequestStatusTag TBtsRequestStatus;

/**
 *   
 */
typedef struct TBtsRequestInfoTag TBtsRequestInfo;
struct TBtsRequestInfoTag
{
    UInt8 id[8];                              ///< ID
    TBtsRequestStatus status;                 ///< 状态
    TBtsRequestAction action;                 ///< 原始Action
    UInt32 crash_counter;                     ///< 异常计数器
    UInt32 flags;                             ///< 标志位，见BPC_INFO_FLAG_XXXXX
    Int32 error;                              ///< 错误码
    UInt8 is_program_main_app;                ///< 是否编码主应用分区
};

/**
 * @brief 故障报告内容
 * 发生故障时记录故障一些内容，包括：函数栈
 */
// typedef struct TBtsFaultReportTag TBtsFaultReport;
// struct TBtsFaultReportTag
// {
//     uint32_t timstamp;                          /**< 发生时间戳 */
//     uint32_t terminal_id;                       /**< 终端ID */
//     uint32_t fwversion;                         /**< 固件版本 */
//     uint32_t hwversion;                         /**< 硬件版本 */
//     uint32_t march;                             /**< MCU架构 */
//     uint32_t board;                             /**< board标识 */
//     uint32_t last_error;                        /**< 错误码 */
//     uint8_t stack_depth;                        /**< 栈深度 */
//     uint8_t reserved_0[3];                      /**< 保留对齐 */
//     uint32_t stack[32];                         /**< 栈,根据栈可回溯出函数栈 */
// };

#ifdef __cplusplus
} // extern "C" {
#endif
#endif
/**
 * @} 
 */
